1. Field of the Invention
This invention relates to a method and system for creating reusable software components. More specifically, the present invention relates to creating software components that can be posted on networks to create extensible computer languages.
2. Description of the Related Art
Software component technologies, like CORBA and J2EE, provide software building blocks that allow developers to easily share and reuse code. Software components increase the reusability of software by enforcing usage through well-defined interfaces that, in their most common implementations, are automatically generated by vendor supplied tools. The CORBA standard, for example, defines interfaces in the Interface Definition Language (IDL) and the resulting definition creates a contract between the producer of the CORBA component and its consumer. The use of well-defined interfaces, coupled with technologies that provide introspection and other services, enforces good design and increases the reusability of software as a whole.
In addition to traditional software component technologies, networked software component technologies improve on the state of the art by making it possible to reuse software components over a network. Using network software tools, client and server code can be automatically generated from the interfaces of components. The resulting client code contains code to marshall calls made to the client class to the server class. The resulting server class contains both the implementation of the component and code to translate calls received from the client code to the corresponding calls in the implementation of the component. In this way, networked components allow client programs to call code that may be located on other machines in the network as if it was located on the local computer. This enables a distributed form of development in which producers of components publish components on a network and consumers reuse them to build applications.
Present technology is vastly simpler, less powerful, and less scalable than the natural languages that humans use to communicate ideas, processes, and data. To communicate calculus, for example, a math teacher will teach a student the syntax and semantics of the calculus language. A second mathematician, by introducing new symbols in a seminal paper, can extend the mathematical language with ease. A third, on receiving a document that contains these new, unfamiliar symbols, can look up the paper written by the second mathematician and, in this way, understand what they mean. All of this seems natural to us since our ability to extend language and learn new words is an effortless act on our part. But, in computer science, none of the current approaches to distributed systems have the abilities of natural language that we take for granted.
Functions and object signatures do not enable the natural modeling of problem domains as found in natural languages. A calculus library that provides and object-oriented or structured interface does not allow users of the library to use integrals, algebraic formulas, or trigonmetric functions as occurs in standard mathematical formulae. In addition to the naturalness of different domain languages, structured and object-oriented languages suffer from severe scalability problems. As mentioned in the prior invention (Method And System for Creating Programs Using Code Having Coupled Syntactic And Semantic Relationships, 1 Jan. 2002, Ser. No. 10/060,433), methods and objects cripple the ability to build truly scalable software because of their lack of cohesion between syntactic and semantic relationships.
In this invention, we demonstrate a method and system that enables some of the properties of natural language. In particular, the present invention enables multiple parties to define linkable programming languages. This increases the naturalness of the distributed system and enables a more scalable model for building software components.